To-Do List
Beta Download the latest Beta release here Beta releases are there for you to help test new features. The features below listed as Finished should be available in the beta. If you try the beta, please post a comment about whether things are working or are broken. Thanks! Release 16 Finished: *Added some caching to improve overall efficiency of reflection calls. In other words, the game should run better now. *Fixed bug - Tiles with 'directional' in the ini don't get the direction sent into the server in multiplayer , when placed by a player. (Needs testing) *Added Tile INI attribute: set 'treasure=True' to make tile shine when using the spelunking potion. *new ModGeneric method , public void ServerCommand(string text) ,you can use it to add server commands by reading the text on them , the method is called before the actual regular text parsing and doesnt stop it. *added ModGeneric method , public void checkXMas() , the regular method is skipped if such method is found. *added new Projectile method , public bool tileCollide(Vector2 CollideVel) , allows executing code when the projectile hits a tile (only for tile collide projectiles) , return true to run normal collision code and false otherwise. *added ModGeneric method , public bool ItemMouseText(SpriteBatch SP,string cursorText,int rare,byte diff,string[] arr,bool[] arr2,bool[] arr3) , allows changing item tooltip texts entirely , return true to draw the normal text or false to skip it and draw your own stuff :P *changed CanEquip , OnUnEquip , OnEquip methods to also take int slot , to know which slot are you trying to equip the things to. *fixed mannequins not accepting custom armors , fixed mannequins torso equipment before bottom equipment *Added Tile INI attribute: set 'dustType=' to any number of dust type you want , for your tile to emit that dust when struck. *Attempted to improve performance of some Tile method calls. Currently the Update() method is now handled as an event, and it no longer takes any arguments. Save the coordinates in Initialize() if they are needed. Some testing with mods that use the Update() method is a good idea... *Fixed issue causing CreatePlayer() method to not get called. *Implemented more efficient handling of Save/Load methods for NPCs in networking code *Implemented a multiplayer-synchronized rand object for use in NPC AI code. *Fixed bug - light property and AddLight method now work in non-color lighting modes. *Fixed bug - tConfig no longer returns wrong x and y values for tiles with multiple rows on their sprite sheet *You can now get default tile types using Config.tileDefs.IDName" *Added hooks for color modification, all float3 properties storing RGB values. **colorShopCopper , colorShopSilver , colorShopGold , colorShopPlatinum : Change color of buy/sell value in shop interface **colorRarityrare : Change item rarity colors *Implemented support for custom static prefixes. Prefixes are defined in INI files in the Prefix folder, here's an example: Stats ;Name is required, this is what gets added to the item name name=of Awesomeness ;Set suffix to True to make the name appear after the item name suffix=True Requirements ;Possible requirements are: melee, ranged, magic, accessory melee=True Item ;Possible attributes: manaCost, damage, scale, knockback, shootSpeed, speed, defense, crit ;defense and crit are additive, and all other attributes are multipliers damage=1.50 knockback=1.15 speed=1.25 scale=1.50 crit=5 Player ;Possible attributes: defense, crit, mana, damage, moveSpeed, meleeSpeed ;All of these are additive, although some are floating point numbers *The Item section contains mostly multipliers that affect item stats, while the Player section is for adding to player-related values (this is what Accessories do to add defense, damage, etc) *Not all possibilities are implemented yet (like you can't add a static value of 5 damage to a weapon) but these may be added later. Currently you can do anything that the vanilla prefixes can do. *If a prefix isn't loaded, the item will get the "Mysterious" prefix, and should regain the original prefix if the prefix's mod is reloaded. *A more detailed description of the possible modifiers will be written later. Note that the 'speed' attribute is how much to increase speed by, this is done to prevent confusion due to the fact that increasing the actual variable itself results in slower speeds. So speed of 1.25 increases weapon speed by 25%, damage of 1.5 increase damage by 50%. *The filename for a prefix is used as a unique identifier *Added new Item methods: **void AffixName(ref string name); - Allows you to modify the name of the item for display purposes, after the prefix has already been applied to it. **string[] UpdateTooltip(); - Return a string array of new lines of text to add to the tooltip **void PostPrefix(int prefixID); - Called right after an item has its prefix set. **bool OverridePrefix(int prefixID) - Specifying this method will override prefix behavior entirely. *Added ability to define Prefixes in Prefix\Prefix.cs in a method called DefinePrefixes(), like so: public List DefinePrefixes() { List pref = new List(); Prefix.Requirement armor = (Item item) => { return (item.accessory || item.bodySlot!=-1 || item.legSlot!=-1 || item.headSlot!=-1); }; pref.AddRange( new Prefix[]{ new Prefix("of Water Walking", true).Require(armor).Mod( (Player player) => { player.waterWalk=true; } ).AddTip("Gives the ability to walk on water") }); return pref; } *Item prefix tooltips will always be calculated even if no prefix is present. If a mod alters an item's damage, for instance, it will tell you how much % higher the damage is than normal. This only applies to used items, not armor/accessories. *Started implementing delegates for custom methods. *Updated KindChatFunc to work as described in the changelog (return true to let normal function be called) *Updated Effects method behavior: It no longer overrides default effects, for default items. This may be a pretty important change for any 'global' item mods that affect all items, including default ones. *Implemented some changes that might prevent threading-related crashes. *UpdateItem method no longer takes any arguments. There is no point' in passing in the Item to the method!'' *Updated custom NPC drops to have a chance of getting prefixes applied *Improved usage of CanDestroyTile to prevent tiles underneath from being destroyed '''Planned: *Option to manually specify 7-zip location in Config Mod.ini *Update modpack builder to read source files from a different directory. Probably should make it configurable in the Config Mod.ini file. *Create a way to create a collection of mods; essentially like a zip file consisting of .obj files. The collection would appear as one mod in the menu, even though it consists of many mods. *Update the town NPC interface to allow for more custom NPCs *Add INI attribute to items for disabling prefixes for that item *Modify the UpdateTooltip() method to be able to modify other arrays that affect text color *Make it easier to apply custom code to projectiles from the items that spawned them. Bugs *'Spawn point gets reset (multiplayer)' *Custom Doors can only be placed in front of walls (low priority) *Multiplayer Bug related to tile PretendType setting? *UseTile method getting inaccurate x and y values - This appears to be getting the right values... *The projectile xoffset and yoffset values are swapped? *Issue causing prefix tooltips to display things like + or - infinity. *Glitch in multiplayer in which you can't see other players' custom armors on them? *Multiplayer Glitch - threw an item at another player, but it didn't go into their inventory. It just disappeared. *Town NPCs spawning multiple times. *Need to create new version of Item.Clone() method that gets called when new item stacks are created, so that Item references in subclass objects are updated properly Ideas *Dynamic prefixes **Currently the system is designed so that prefixes are static, but it would be possible to make it object-oriented and allow prefixes to intercept method calls for the item/player. *Create a separate INI section for NPCs for adding new item drops, rather than overriding existing drops. *Make it possible to make doors with other sizes besides 1x3. *add a hook that lets people change the worldgen size conveniently *Tiles - Add INI option for specifying which item to drop based on which frame the tile is on *Add a method for modifying how critical hits affect damage *Ability to specify settings for audio files, either with INI files, or in code *Add a method that lets you override the NPC spawning code; useful if you don't want any of the default NPCs to spawn *Support for custom Boss music *Update the server to use a separate file for configuring which mods are loaded, and also add a menu option for choosing which mods are loaded. *Ability to rebuild a large selection of mods all at once. Maybe even let it make use of the new .obj format by automatically extracting the source so you don't have to manually do that. *If a mod is outdated, and it is in the new format with the source included, have tConfig automatically rebuild it. *Remove custom NPC from world when loading it without the NPC's associated mod. *'randomFrames' Tile ini attribute. Specify the number of actual possible frames, and the frame used when the tile is placed is chosen from those at random *CanPlaceSlot() method for regular Chests Category:Surfpup